{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "4d1d6a06-12d4-4ab1-a51f-743500049a13",
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "请输入年份： 2024\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "===一月 2024===\n",
      "日 一 二 三 四 五 六\n",
      "    1  2  3  4  5  6 \n",
      " 7  8  9 10 11 12 13 \n",
      "14 15 16 17 18 19 20 \n",
      "21 22 23 24 25 26 27 \n",
      "28 29 30 31 \n",
      "\n",
      "===二月 2024===\n",
      "日 一 二 三 四 五 六\n",
      "             1  2  3 \n",
      " 4  5  6  7  8  9 10 \n",
      "11 12 13 14 15 16 17 \n",
      "18 19 20 21 22 23 24 \n",
      "25 26 27 28 29 \n",
      "\n",
      "===三月 2024===\n",
      "日 一 二 三 四 五 六\n",
      "                1  2 \n",
      " 3  4  5  6  7  8  9 \n",
      "10 11 12 13 14 15 16 \n",
      "17 18 19 20 21 22 23 \n",
      "24 25 26 27 28 29 30 \n",
      "31 \n",
      "\n",
      "===四月 2024===\n",
      "日 一 二 三 四 五 六\n",
      "    1  2  3  4  5  6 \n",
      " 7  8  9 10 11 12 13 \n",
      "14 15 16 17 18 19 20 \n",
      "21 22 23 24 25 26 27 \n",
      "28 29 30 \n",
      "\n",
      "===五月 2024===\n",
      "日 一 二 三 四 五 六\n",
      "          1  2  3  4 \n",
      " 5  6  7  8  9 10 11 \n",
      "12 13 14 15 16 17 18 \n",
      "19 20 21 22 23 24 25 \n",
      "26 27 28 29 30 31 \n",
      "\n",
      "===六月 2024===\n",
      "日 一 二 三 四 五 六\n",
      "                   1 \n",
      " 2  3  4  5  6  7  8 \n",
      " 9 10 11 12 13 14 15 \n",
      "16 17 18 19 20 21 22 \n",
      "23 24 25 26 27 28 29 \n",
      "30 \n",
      "\n",
      "===七月 2024===\n",
      "日 一 二 三 四 五 六\n",
      "    1  2  3  4  5  6 \n",
      " 7  8  9 10 11 12 13 \n",
      "14 15 16 17 18 19 20 \n",
      "21 22 23 24 25 26 27 \n",
      "28 29 30 31 \n",
      "\n",
      "===八月 2024===\n",
      "日 一 二 三 四 五 六\n",
      "             1  2  3 \n",
      " 4  5  6  7  8  9 10 \n",
      "11 12 13 14 15 16 17 \n",
      "18 19 20 21 22 23 24 \n",
      "25 26 27 28 29 30 31 \n",
      "\n",
      "\n",
      "===九月 2024===\n",
      "日 一 二 三 四 五 六\n",
      " 1  2  3  4  5  6  7 \n",
      " 8  9 10 11 12 13 14 \n",
      "15 16 17 18 19 20 21 \n",
      "22 23 24 25 26 27 28 \n",
      "29 30 \n",
      "\n",
      "===十月 2024===\n",
      "日 一 二 三 四 五 六\n",
      "       1  2  3  4  5 \n",
      " 6  7  8  9 10 11 12 \n",
      "13 14 15 16 17 18 19 \n",
      "20 21 22 23 24 25 26 \n",
      "27 28 29 30 31 \n",
      "\n",
      "===十一月 2024===\n",
      "日 一 二 三 四 五 六\n",
      "                1  2 \n",
      " 3  4  5  6  7  8  9 \n",
      "10 11 12 13 14 15 16 \n",
      "17 18 19 20 21 22 23 \n",
      "24 25 26 27 28 29 30 \n",
      "\n",
      "\n",
      "===十二月 2024===\n",
      "日 一 二 三 四 五 六\n",
      " 1  2  3  4  5  6  7 \n",
      " 8  9 10 11 12 13 14 \n",
      "15 16 17 18 19 20 21 \n",
      "22 23 24 25 26 27 28 \n",
      "29 30 31 \n",
      "\n"
     ]
    }
   ],
   "source": [
    "# -*- ecoding: utf-8 -*-\n",
    "# @Author: houlinxiao\n",
    "# @Time: 2024/10/12 17:41\n",
    "def LeapYears(year):\n",
    "    # 计算从1900年到指定年份之间闰年的数量\n",
    "    count = 0\n",
    "    for i in range(1900, year):\n",
    "        if i % 4 == 0 and (i % 100 != 0 or i % 400 == 0):\n",
    "            count += 1\n",
    "    return count\n",
    "\n",
    "def isLeapYear(year):\n",
    "    # 判断输入年份是否为闰年\n",
    "    return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)\n",
    "\n",
    "def firstDay(year):\n",
    "    # 计算输入年份的1月1日是星期几\n",
    "    k = LeapYears(year)  # 计算闰年的数目\n",
    "    n = (year - 1900) * 365 + k\n",
    "    return (n + 1) % 7\n",
    "\n",
    "def getDaysInMonth(year, month):\n",
    "    # 获取输入年份月份的天数\n",
    "    if month in [4, 6, 9, 11]:\n",
    "        return 30\n",
    "    elif month == 2:\n",
    "        return 29 if isLeapYear(year) else 28\n",
    "    else:\n",
    "        return 31\n",
    "\n",
    "def checkTheYear(year):\n",
    "    # 判断年份是否合法\n",
    "    if year < 1900:\n",
    "        print(\"年份输入错误\")\n",
    "        exit()\n",
    "\n",
    "def show(year):\n",
    "    start_day = firstDay(year)\n",
    "    month_names = [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\",\n",
    "                   \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"]\n",
    "\n",
    "    for month in range(1, 13):\n",
    "        days_in_month = getDaysInMonth(year, month)\n",
    "        print(f\"==={month_names[month - 1]} {year}===\")\n",
    "        print(\"日 一 二 三 四 五 六\")\n",
    "\n",
    "        print(\"   \" * start_day, end=\"\")\n",
    "\n",
    "        for day in range(1, days_in_month + 1):\n",
    "            print(f\"{day:2} \", end=\"\")\n",
    "            start_day = (start_day + 1) % 7\n",
    "            if start_day == 0:\n",
    "                print()\n",
    "        print(\"\\n\")\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    year = int(input(\"请输入年份：\"))\n",
    "    checkTheYear(year)\n",
    "    show(year)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "351726f6-a9e1-4af1-a067-e6d18923ad31",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
